
package id.isran.kamusindonesiamuna.fragment;

import java.util.ArrayList;
import java.util.List;

import id.isran.kamusindonesiamuna.R;
import id.isran.kamusindonesiamuna.basisdata.Data;
import id.isran.kamusindonesiamuna.utils.Utils;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class FragmentKalimatInaMuna extends Fragment implements OnClickListener {
    private EditText etKalimatIna, etKalimatMuna;
    private Button btnTerjemahkan, btnHapus;

    // array yang berbentuk list untuk menampung temporary kata dan kalimat
    // terjemahan
    private List<String> tmpString;
    private List<String> textHasil;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // instance array list
        tmpString = new ArrayList<String>();
        textHasil = new ArrayList<String>();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        ViewGroup view = (ViewGroup) inflater.inflate(
                R.layout.fragment_kalimat_ina_muna, null);

        etKalimatIna = (EditText) view.findViewById(R.id.et_kalimat_ina);
        etKalimatMuna = (EditText) view.findViewById(R.id.et_terjemahan_muna);
        btnTerjemahkan = (Button) view.findViewById(R.id.btn_terjemahkan);
        btnHapus = (Button) view.findViewById(R.id.btn_hapus);

        btnTerjemahkan.setOnClickListener(this);
        btnHapus.setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View v) {
        if (v == btnTerjemahkan) {
            if (!TextUtils.isEmpty(etKalimatIna.getText().toString())) {

                removeTandaBaca(etKalimatIna.getText().toString());

                artikan();

                String tes = "";
                for (int i = 0; i < textHasil.size(); i++) {
                    tes += textHasil.get(i) + " ";
                }
                etKalimatMuna.setText(tes);

                tmpString.clear();
                textHasil.clear();
            } else
            {
                Toast.makeText(getActivity(), "Masukkan kalimat", Toast.LENGTH_SHORT).show();
            }
        } else if (v == btnHapus) {
            etKalimatIna.setText("");
            etKalimatMuna.setText("");
        }
    }

    /**
     * @param kalimat kalimat yang mau dipisah tanda bacanya
     */
    private void removeTandaBaca(String kalimat) {
        String[] split = kalimat.split(" ");

        for (int i = 0; i < split.length; i++) {
            if (split[i].contains(",")) {

                Utils.TRACE("KalimatIna", "ada koma");
                tmpString.add(split[i].replaceAll("[,]", ""));
                tmpString.add(",");

            } else if (split[i].contains(".")) {
                Utils.TRACE("KalimatIna", "ada titik");
                tmpString.add(split[i].replaceAll("[.]", ""));
                tmpString.add(".");
            } else if (split[i].contains("!")) {

                Utils.TRACE("KalimatIna", "ada tanda seru");
                tmpString.add(split[i].replaceAll("[!]", ""));
                tmpString.add("!");

            } else if (split[i].contains("?")) {

                Utils.TRACE("KalimatIna", "ada tanda tanya");
                tmpString.add(split[i].replaceAll("[?]", ""));
                tmpString.add("?");

            } else if (split[i].contains(":")) {
                Utils.TRACE("KalimatIna", "ada titik dua");
                tmpString.add(split[i].replaceAll("[:]", ""));
                tmpString.add(":");

            } else {
                tmpString.add(split[i]);
            }
        }
    }

    private void artikan() {
        for (int i = 0; i < tmpString.size(); i++) {
            // cek semua tanda baca , . ? ! :
            if (!tmpString.get(i).equals(",") &&
                    !tmpString.get(i).equals(".") &&
                    !tmpString.get(i).equals("?") &&
                    !tmpString.get(i).equals("!") &&
                    !tmpString.get(i).equals(":")) {

                // cek apakah diakhiri kata nya
                if (tmpString.get(i).endsWith("nya")) {
                    // jika ada nya di kata yang ingin diartikan

                    Utils.TRACE("FragmentKalimatInaMuna", "artikan: ada nya");

                    String pisah = tmpString.get(i).replaceAll("nya$", "");

                    // cari index kata yang ingin diartikan menggunakan
                    // interpolation search
                    int index = Data.interpolationSearch(Data.getNilaiKonversi(pisah,
                            Data.INDO_MUNA), Data.INDO_MUNA);

                    if (index != -1) {
                        // jika ada artinya

                        // dicek apakah ks, kb, kk
                        // jika ya ditambah nyo di artinya
                        if (Data.dataInaMuna[index][Data.INDEX_JENIS].equals("ks")
                                || Data.dataInaMuna[index][Data.INDEX_JENIS].equals("kb")
                                || Data.dataInaMuna[index][Data.INDEX_JENIS].equals("kk")) {

                            textHasil.add(Data.dataInaMuna[index][Data.INDEX_TERJEMAHAN] + "no");

                        } else {
                            textHasil.add(Data.dataInaMuna[index][Data.INDEX_TERJEMAHAN]);
                        }
                    } else {
                        // jika tidak ada artinya

                        textHasil.add(pisah);
                    }

                } else {
                    // jika tidak ada nya

                    // cek apakah kata tersebut adalah yang
                    if (!tmpString.get(i).equals("yang")) {
                        int index = Data.interpolationSearch(
                                Data.getNilaiKonversi(tmpString.get(i),
                                        Data.INDO_MUNA), Data.INDO_MUNA);

                        if (index != -1) {
                            textHasil.add(Data.dataInaMuna[index][Data.INDEX_TERJEMAHAN]);
                        } else {
                            // jika tidak ada arti
                            textHasil.add(tmpString.get(i));
                        }
                    } else {
                        // jika adalah ya maka tidak diartikan
                        textHasil.add("");
                    }
                }
            } else {
                textHasil.add(tmpString.get(i));
            }
        }
    }
}
